'use strict';

var app = angular.module('app')
	.config(function() {

	})
	.directive('pageInitDirective', function() {
		return {
			restrict: 'A',
			link: function(scope, element, attrs) {
				//页面样式设置
				app.themeSetting();
				//全屏设置
				app.fullscreen();
				//返回顶部
				app.backTop();
				//顶部搜索框
				app.searchFrom();
				//左侧菜单缩小
				app.menuMin();
				//tooltip
				app.tooltip();
			}
		}
	})
	.directive('leftSiderBarMenu', function() {
		return {
			restrice: 'A',
			link: function(scope, element, attrs) {
				angular.element('#sidebar').css('min-height', '100%');
				var s = angular.element('#side-menu').metisMenu();

				angular.element('#side-menu li').on('click', function() {
					$('#side-menu li').removeClass('active');
					$(this).addClass('active');
				});

				angular.element(document).ready(function() {
					$(window).on("load resize", function() {
						if($(this).width() < 768) {
							$('body').removeClass();
							$('div.sidebar-collapse').addClass('collapse');
						} else {
							$('body').addClass($.cookie('menu_style') + ' ' + $.cookie('header'));
							$('div.sidebar-collapse').removeClass('collapse');
							$('div.sidebar-collapse').css('height', 'auto');
						}

						if($('#sidebar').height() > $('#page-wrapper').height()) {
							$('#wrapper').css('height', $('#sidebar').height());
						}
					});
				});

			}
		}
	})
	.directive('icheck', function() {
		return {
			link: function(scope, element, attrs) {
				angular.element(element).iCheck({
					checkboxClass: (attrs.checkboxstyle == undefined || attrs.checkboxstyle == '' ? 'icheckbox_square-blue' : attrs.checkboxstyle),
					radioClass: (attrs.radiostyle == undefined || attrs.radiostyle == '' ? 'iradio_square-blue' : attrs.radiostyle)
				});
				//全选
				$('.checkall').on('ifChecked ifUnchecked', function(event) {
					if(event.type == 'ifChecked') {
						$(this).closest('table').find('input[type=checkbox]').iCheck('check');
					} else {
						$(this).closest('table').find('input[type=checkbox]').iCheck('uncheck');
					}
				});
			}
		}
	})
	.directive('dropdownDirective', function() {
		return {
			restrict: 'A',
			link: function(scope, element, attrs) {
				angular.element('.dropdown-toggle').dropdownHover();

				angular.element('.dropdown-slimscroll').slimScroll({
					"height": '250px',
					"wheelStep": 30
				});
			}
		}
	});

/**
 * 信息提示
 */
app.tooltip = function() {
	$("[data-toggle='tooltip'], [data-hover='tooltip']").tooltip();
}

/**
 * 顶部搜索框
 */
app.searchFrom = function() {
	// BEGIN SEARCH FORM ON TOPBAR
	$('#topbar-search').on('click', function(e) {
		$(this).addClass('open');
		$(this).find('.form-control').focus();

		$('#topbar-search .form-control').on('blur', function(e) {
			$(this).closest('#topbar-search').removeClass('open');
			$(this).unbind('blur');
		});
	});
	// END SEARCH FORM ON TOPBAR
}

/**
 * 返回顶部
 */
app.backTop = function() {
	//BEGIN BACK TO TOP
	$(window).scroll(function() {
		if($(this).scrollTop() < 200) {
			$('#totop').fadeOut();
		} else {
			$('#totop').fadeIn();
		}
	});
	$('#totop').on('click', function() {
		$('html, body').animate({
			scrollTop: 0
		}, 'fast');
		return false;
	});
	//END BACK TO TOP
}

/**
 * 页面样式设置
 */
app.themeSetting = function() {
	//BEGIN THEME SETTING
	$('#theme-setting > a.btn-theme-setting').click(function() {
		if($('#theme-setting').css('right') < '0') {
			$('#theme-setting').css('right', '0');
		} else {
			$('#theme-setting').css('right', '-250px');
		}
	});

	// Begin Change Theme Color
	var list_menu = $('.dropdown-theme-setting > li > select#list-menu');
	var list_style = $('.dropdown-theme-setting > li > select#list-style');
	var list_header = $('.dropdown-theme-setting > li > select#list-header');
	var list_color = $('.dropdown-theme-setting > li > ul#list-color > li');

	// FUNCTION CHANGE URL STYLE ON HEAD TAG
	var setTheme = function(menu_style, style, header, color) {
			$.cookie('menu_style', menu_style);
			$.cookie('style', style);
			$.cookie('header', header);
			$.cookie('color', color);

			$('body').removeClass();
			$('body').addClass(menu_style + ' ' + header);
			// Set slimscroll when sidebar fixed
			if($.cookie('header') == 'header-fixed') {
				if($('body').hasClass('sidebar-collapsed')) {
					$('#side-menu').attr('style', '').parent('.slimScrollDiv').replaceWith($('#side-menu'));
				} else {
					setTimeout(function() {
						$('#side-menu').slimScroll({
							"height": $(window).height() - 100,
							'width': '250px',
							'wheelStep': 30
						});
						$('#side-menu').focus();
					}, 500)
				}
			} else {
				$('#side-menu').attr('style', '').parent('.slimScrollDiv').replaceWith($('#side-menu'));
			}

			$('#theme-change').attr('href', 'css/themes/' + style + '/' + color + '.css');
		}
		// INITIALIZE THEME FROM COOKIE
		// --NOTES: HAVE TO SET VALUE FOR STYLE & COLOR BEFORE AND AFTER ACTIVE THEME
		// Check cookie when window reload and set value for each option(menu,style,color)
	if($.cookie('style')) {
		// FIX SIDEBAR IN HORIZONTAL AND RIGHT
		if($('body').hasClass('clear-cookie')) {
			$.removeCookie('menu_style');
		} else {
			list_menu.find('option').each(function() {
				if($(this).attr('value') == $.cookie('menu_style')) {
					$(this).attr('selected', 'selected');
				}
			});

			list_style.find('option').each(function() {
				if($(this).attr('value') == $.cookie('style')) {
					$(this).attr('selected', 'selected');
				}
			});

			list_header.find('option').each(function() {
				if($(this).attr('value') == $.cookie('header')) {
					$(this).attr('selected', 'selected');
				}
			});

			list_color.removeClass("active");
			list_color.each(function() {
				if($(this).attr('data-color') == $.cookie('color')) {
					$(this).addClass('active');
				}
			});
			setTheme($.cookie('menu_style'), $.cookie('style'), $.cookie('header'), $.cookie('color'));
		}
	};

	// SELECT MENU STYLE EVENT
	list_menu.on('change', function() {
		list_color.each(function() {
			if($(this).hasClass('active')) {
				color_active = $(this).attr('data-color');
			}
		});
		// No Menu style 3 fixed
		if(($.cookie('header') == 'header-fixed') && ($(this).val() == 'sidebar-icons')) {
			setTheme($(this).val(), list_style.val(), 'header-static', color_active);
			return;
		}
		setTheme($(this).val(), list_style.val(), list_header.val(), color_active);
	});
	// SELECT STYLE EVENT
	list_style.on('change', function() {
		list_color.each(function() {
			if($(this).hasClass('active')) {
				color_active = $(this).attr('data-color');
			}
		});
		setTheme(list_menu.val(), $(this).val(), list_header.val(), color_active);
	});

	// SELECT HEADER EVENT
	list_header.on('change', function() {
		list_color.each(function() {
			if($(this).hasClass('active')) {
				color_active = $(this).attr('data-color');
			}
		});
		// No Menu style 3 fixed
		if(($.cookie('menu_style') == 'sidebar-icons') && ($(this).val() == 'header-fixed')) {
			return;
		}
		setTheme(list_menu.val(), list_style.val(), $(this).val(), color_active);
	});
	// LI CLICK EVENT
	list_color.on('click', function() {
		list_color.removeClass('active');
		$(this).addClass('active');
		setTheme(list_menu.val(), list_style.val(), list_header.val(), $(this).attr('data-color'));
	});
	// End Change Theme Color
	//END THEME SETTING
}

/**
 * 左侧菜单缩小
 */
app.menuMin = function() {
	var flag;
	if($('body').hasClass('sidebar-colors')) {
		flag = true;
	} else {
		flag = false;
	}
	$('#menu-toggle').toggle(
		function() {
			if($('#wrapper').hasClass('right-sidebar')) {
				$('body').addClass('right-side-collapsed')
				$('#sidebar .menu-scroll').css('overflow', 'initial');
			} else {
				if($.cookie('menu_style')) {
					$('body').addClass('sidebar-collapsed').removeClass($.cookie('menu_style'));
					$('#sidebar .menu-scroll').css('overflow', 'initial');
					// Remove slimscroll when collapsed
					if($.cookie('header') == 'header-fixed') {
						// Use for menu style 1 & 2
						if($('body').hasClass('sidebar-collapsed')) {
							$('#side-menu').attr('style', '').parent('.slimScrollDiv').replaceWith($('#side-menu'));
						} else {
							// Use for menu style 4
							setTimeout(function() {
								$('#side-menu').slimScroll({
									"height": $(window).height() - 50,
									'width': '250px',
									"wheelStep": 5
								});
								$('#side-menu').focus();
							}, 500)
						}
					}
				} else {
					$('body').addClass('sidebar-collapsed').removeClass($.cookie('menu_style'));
					$('#sidebar .menu-scroll').css('overflow', 'initial');
				}
			}
		},
		function() {
			if($('#wrapper').hasClass('right-sidebar')) {
				$('body').removeClass('right-side-collapsed');
				$('#sidebar .menu-scroll').css('overflow', 'hidden');
			} else {
				$('body').removeClass('sidebar-collapsed');
				$('body').addClass($.cookie('menu_style'));
				if($.cookie('header') == 'fixed') {
					$('#side-menu').addClass('sidebar-fixed');
				}
				// Add slimscroll when open and have cookie fixed
				if($.cookie('header') == 'header-fixed') {
					if($('body').hasClass('sidebar-collapsed')) {
						// Use for menu style 1 & 2
						$('#side-menu').attr('style', '').parent('.slimScrollDiv').replaceWith($('#side-menu'));
					} else {
						// Use for menu style 4
						setTimeout(function() {
							$('#side-menu').slimScroll({
								"height": $(window).height() - 50,
								'width': '250px',
								"wheelStep": 5
							});
							$('#side-menu').focus();
						}, 500)
					}
				}
			}
		}
	);

	if($('#wrapper').hasClass('right-sidebar')) {
		$('ul#side-menu li').hover(function() {
			if($('body').hasClass('right-side-collapsed')) {
				$(this).addClass('nav-hover');
			}
		}, function() {
			if($('body').hasClass('right-side-collapsed')) {
				$(this).removeClass('nav-hover');
			}
		});
	} else {
		$('ul#side-menu li').hover(function() {
			if($('body').hasClass('left-side-collapsed')) {
				$(this).addClass('nav-hover');
			}
		}, function() {
			if($('body').hasClass('left-side-collapsed')) {
				$(this).removeClass('nav-hover');
			}
		});
	}
}

/**
 * 全屏设置
 */
app.fullscreen = function() {
	//BEGIN FULL SCREEN
	$('.btn-fullscreen').click(function() {
		if(!document.fullscreenElement && // alternative standard method
			!document.mozFullScreenElement && !document.webkitFullscreenElement && !document.msFullscreenElement) { // current working methods
			if(document.documentElement.requestFullscreen) {
				document.documentElement.requestFullscreen();
			} else if(document.documentElement.msRequestFullscreen) {
				document.documentElement.msRequestFullscreen();
			} else if(document.documentElement.mozRequestFullScreen) {
				document.documentElement.mozRequestFullScreen();
			} else if(document.documentElement.webkitRequestFullscreen) {
				document.documentElement.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);
			}
		} else {
			if(document.exitFullscreen) {
				document.exitFullscreen();
			} else if(document.msExitFullscreen) {
				document.msExitFullscreen();
			} else if(document.mozCancelFullScreen) {
				document.mozCancelFullScreen();
			} else if(document.webkitExitFullscreen) {
				document.webkitExitFullscreen();
			}
		}
	});
	//END FULL SCREEN
}